package br.ufpa.cbcc2007.dikemon.map.actors;

import java.io.IOException;
import java.io.InputStream;

import javax.microedition.lcdui.Image;

import br.ufpa.cbcc2007.dikemon.engine.Engine;
import br.ufpa.cbcc2007.dikemon.map.Actor;
import br.ufpa.cbcc2007.dikemon.map.MapScene;
import br.ufpa.cbcc2007.dikemon.util.TextBox;

//Classe que representa um personagem que pode falar com o Herói, quando este estiver em frente ao mesmo e apertar FIRE.
public class Talker extends Actor {
	
	private String mensage;	// Mensagem a ser exibida.
	private int talkingStatus;// 0 calado (tecla solta), 1 falando (tecla press), 2 falando(tecla solta), 3 calado(press); 

	//Construtor
	public Talker(Image image, int frameWidth, int frameHeight, int gridX, int gridY) {
		super(image, frameWidth, frameHeight, gridX, gridY);
		talkingStatus = 0;
	}

	//Atualização
	public void actualize() {
		if((MapScene.getMapScene().getKeyState()&Engine.FIRE_PRESSED)!= 0){ //Se o botão FIRE estiver pressionado 
			Hero hero = Hero.getHero();
			if(talkingStatus==0){ //Se estiver calado
				//Se houver herói e este estiver adjacente
				if(hero!= null && 
						(hero.getGridX()==getGridX()&& Math.abs(hero.getGridY()-getGridY())==1) ||
						(hero.getGridY()==getGridY()&& Math.abs(hero.getGridX()-getGridX())==1)){
					//Abrir imagem textbox
					InputStream textboxImage = Engine.getEngine().getClass().getResourceAsStream("/textbox.png");
					TextBox textBox = null;
					try {
						// Instanciar TextBox
						textBox = new TextBox(Image.createImage(textboxImage), Engine.getEngine().getFont(), 11, 2);
						textBox.setText(mensage);
						textBox.setPosition(0, 16*9);
					} catch (IOException e) {
						e.printStackTrace();
					}
					//Adicionar  textBox ao map scene
					MapScene.getMapScene().setTextBox(textBox);
					//Ir para o status para falando com tecla pressionada
					talkingStatus=1;
					//Proibir herói de se mover livremente
					hero.setFreeMovement(false);
				}
			}
			else if(talkingStatus==2){ //Se estiver falando com tecla solta
				MapScene.getMapScene().setTextBox(null);//Apagar caixa de Texto
				hero.setFreeMovement(true);//Permitir o herói a se mover livremente
				talkingStatus = 3; // Ir para status calado com com tecla pressionada
			}
		}
		// Se a tecla FIRE não estiver pressionada
		else if(talkingStatus == 1) talkingStatus =2;//Se com no estado falando c/ tecla press, ir para falando solto 
		else if(talkingStatus == 3) talkingStatus =0;//Se com no estado calado c/ tecla press, ir para calado solto
		super.actualize();//Chamar atualização da classe base.
	}

	public void setMensage(String mensage) {
		this.mensage = mensage;
	}

	public String getMensage() {
		return mensage;
	}
}
